home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / splib / splib.lzh / PRG / ZNSPLAY / ZNSMOV.C < prev    next >
C/C++ Source or Header  |  1993-10-10  |  3KB  |  109 lines

  1. /*************************************************************************
  2. *    "znsmov.c"
  3. *************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7.  
  8. #include    <egb.h>
  9.  
  10. #include    <ugoku.h>
  11. #include    "znsplay.h"
  12.  
  13. /* graphic init */
  14.  
  15. static    int        moving_graph_init( int md, int x0, int y0, int x1, int y1 )
  16. {
  17.     int                x, y;
  18.     static    struct    _tbl_t
  19.     {    int        dx, dy,    vx, vy,    ox, oy;
  20.     } tbl[4] =
  21.     {    {    320,240,    160,120,      0,  0    },    /* ü~1    */
  22.         {    320,240,      0,  0,      0,  0    },    /* ü~2    */
  23.         {    213,160,      0,  0,     54, 40    },    /* ü~3    */
  24.         {    160,120,      0,  0,     80, 60    },    /* ü~4    */
  25.     };
  26.     struct    _tbl_t    *ptr;
  27.     FRAME            fr;    /* 640ü~480ëµû╩é╔è╖ÄZé╡é─    */
  28.  
  29.     if ( md < 1 )
  30.         md = 1;
  31.     else if ( md > 4 )
  32.         md = 4;
  33.     ptr = &tbl[md-1];
  34.  
  35.     if( x0 == 0 && y0 == 0 && x1 == 0 && y1 == 0 )
  36.     {
  37.         x1 = 319;
  38.         y1 = 239;
  39.     }
  40.     x = ((x0+x1+1) >> 1) - 160;    /* èGé╠ÆåÉSé╠é╕éΩé≡îvÄZ */
  41.     y = ((y0+y1+1) >> 1) - 120;
  42.  
  43.     ZNS_cls();
  44.     if ( DspCtrl.page0 != 10 )
  45.     {
  46.         EGB_resolution(EgbPtr,0,10);
  47.         DspCtrl.page0       = 10;
  48.         DspCtrl.scinf[0].md = 10;
  49.         EGB_displayPage(EgbPtr,1,3);
  50.         page1_palette();
  51.     }
  52.  
  53.     DSP_writePage(0);
  54.     ZNS_displayStart(2,md,md);                /* ëµû╩é╠ègæσ                */
  55.     ZNS_displayStart(3,ptr->dx,ptr->dy);    /* ò\Īëµû╩é╠æσé½é│            */
  56.     ZNS_displayStart(0,ptr->vx,ptr->vy);    /* ëµû╩é╠ò\ĪèJÄnêΩé╠É▌ÆΦ    */
  57.     x = ptr->ox + x;
  58.     y = ptr->ox + y;
  59.     ZNS_displayStart(1,x,y);                /* ë╝æzëµû╩Æåé╠ê┌ô«            */
  60.  
  61.     fr.x1 = ptr->vx + (x0-x) * md;
  62.     fr.y1 = ptr->vy + (y0-y) * md;
  63.     fr.x2 = ptr->vx + (x1-x) * md + md - 1;
  64.     fr.y2 = ptr->vy + (y1-y) * md + md - 1;
  65.     ZNS_frame( &fr );
  66.  
  67.     return (0);
  68. }
  69.  
  70. int        zns_play_mov( ZNSMOVE_T *znsmove )
  71. {
  72.     int        frame, x0, y0, x1, y1, wsize;
  73.     int        error;
  74.     char    *buf, *work;
  75.  
  76.     if ( znsmove->mode == ZNS_MODE_MEMORY )
  77.     {
  78.         error = mov_memory_play_init(
  79.             znsmove->filename, ZnsNextCheck, &frame,&x0,&y0,&x1,&y1, &wsize );
  80.     } else
  81.     {
  82.         error = mov_disk_play_init(
  83.             znsmove->filename, ZnsNextCheck, &frame,&x0,&y0,&x1,&y1, &wsize );
  84.     }
  85.     if( error )    return error;
  86.  
  87.     moving_graph_init( znsmove->expand, x0, y0, x1, y1 );
  88.  
  89.     if ( (buf = malloc( 153600 )) == NULL )
  90.     {
  91.         return 7;            /* out of memory */
  92.     }
  93.     if ( (work = malloc( wsize )) == NULL )
  94.     {
  95.         free( buf );
  96.         return 7;            /* out of memory */
  97.     }
  98.  
  99.     if ( znsmove->mode == ZNS_MODE_MEMORY )
  100.         error = mov_memory_play( buf, work, znsmove->filename, 0, znsmove->wait );
  101.     else
  102.         error = mov_disk_play  ( buf, work, znsmove->filename, 0, znsmove->wait );
  103.  
  104.     free( buf );
  105.     free( work );
  106.  
  107.     return error;
  108. }
  109.